/**
 * 缓存优先
 * @param {*} request
 * @returns
 */

// 导入 Firebase SDK
importScripts("./js/firebase-app-compat.js");
importScripts("./js/firebase-messaging-compat.js");

let task_id;
let uuid;

const VERSION = "v1";

const CACHE_NAME = "my-cache-" + VERSION;

const CACHE_WHITELIST = [CACHE_NAME];

// // 安装阶段
// self.addEventListener("install", function (event) {
//   self.skipWaiting(); // 强制立即激活新 Service Worker
//   event.waitUntil(
//     caches.open(CACHE_NAME).then(function (cache) {
//       return cache.addAll([
//         "/js/index.js",  // 需要缓存的脚本
//         "index.html",    // 需要缓存的页面
//         "test.css"       // 需要缓存的样式文件
//         // ... 其他需要预缓存的资源
//       ]);
//     })
//   );
// });

// // 激活阶段
// self.addEventListener("activate", function (event) {
//   event.waitUntil(
//     caches.keys().then(function (cacheNames) {
//       return Promise.all(
//         cacheNames.map(function (cacheName) {
//           // 删除旧版缓存
//           if (!CACHE_WHITELIST.includes(cacheName)) {
//             return caches.delete(cacheName);
//           }
//         })
//       );
//     })
//   );
// });

// // 网络请求拦截处理
// self.addEventListener("fetch", (event) => {
//   const url = new URL(event.request.url);
//   // 处理 firebase-messaging-sw.js 和 www.gstatic.com 的请求
//   if (url.pathname.includes('firebase-messaging-sw.js') || url.hostname === 'www.gstatic.com') {
//     event.respondWith(fetch(event.request)); // 直接从网络请求，而不使用缓存
//   } else if (url.hostname === 'app.adjust.com' && url.pathname === '/session' && event.request.method === "POST") {
//     // 排除对 Adjust session POST 请求的拦截，直接从网络获取
//     console.log("Allowing Adjust session POST request");
//     event.respondWith(fetch(event.request));
//   } else if (event.request.method === "GET" && (url.protocol === "http:" || url.protocol === "https:")) {
//     // 处理 GET 请求
//     event.respondWith(
//       caches.match(event.request).then((cachedResponse) => {
//         // 如果缓存中有响应，直接返回缓存
//         if (cachedResponse) {
//           return cachedResponse;
//         }

//         // 如果缓存中没有响应，从网络获取并缓存
//         return fetch(event.request).then((fetchResponse) => {
//           return caches.open(CACHE_NAME).then((cache) => {
//             cache.put(event.request, fetchResponse.clone()); // 缓存网络响应
//             return fetchResponse;
//           });
//         });
//       }).catch((error) => {
//         console.error("Cache match failed:", error);
//         // 如果缓存和网络都失败，返回离线页面
//         return caches.match("/index.html"); // 假设有离线页面
//       })
//     );
//   } else {
//     // 对于 POST 请求或其他请求类型，直接从网络获取
//     event.respondWith(
//       fetch(event.request)
//         .then((response) => {
//           if (!response.ok) {
//             throw new Error("Network response was not ok");
//           }
//           return response;
//         })
//         .catch((error) => {
//           console.error("Fetch failed:", error);
//           // 这里可以返回一个默认的离线页面或错误提示
//           return new Response("Error fetching the resource", {
//             status: 500,
//             statusText: "Internal Server Error",
//           });
//         })
//     );
//   }
// });


self.addEventListener("notificationclick", (event) => {
  console.log('notificationclick',event.notification.data); 
  const data = {
    task_id: task_id,
    uuid: uuid,
  };
  const fetchPromise = fetch("https://pwa-api.ys-test.top/push.Task/sign", {
    method: "POST",
    body: JSON.stringify(data),
    headers: {
      "Content-Type": "application/json",
    },
  })
    .then((res) => {
      console.log(res);
    })
    .catch((error) => {
      console.error("获取数据时出错:", error);
    });
  const notification = event.notification;
  // 点击打开
  if (event.action == "button_left") {
    if (notification.data && notification.data.url) {
      // event.waitUntil(clients.openWindow(event.notification.data.url_left));
      const openWindowPromise = clients.openWindow(
        event.notification.data.url_left
      );
      event.waitUntil(Promise.all([fetchPromise, openWindowPromise]));
    }
  } else if (event.action == "button_right") {
    // event.waitUntil(clients.openWindow(event.notification.data.url_right));
    const openWindowPromise = clients.openWindow(
      event.notification.data.url_right
    );
    event.waitUntil(Promise.all([fetchPromise, openWindowPromise]));
  }
  const openWindowPromise = clients.openWindow(
    event.notification.data.url_tuiguang
  );
  // event.waitUntil(clients.openWindow(event.notification.data.url_tuiguang));
  // 关闭通知
  // event.notification.close();
  // 打开网页
    
    event.waitUntil(Promise.all([fetchPromise, openWindowPromise]));
  
});

// 处理后台消息（页面关闭或最小化时）
self.addEventListener("push", function (event) {
  const payload = event.data.json();
  const allContent = JSON.parse(payload.data.body);
  task_id = allContent.task_id;
  uuid = allContent.uuid;
  const action = [];
  const datas = {};
  if (allContent.have_button == 1) {
    action.push(
      { action: "button_left", title: allContent.button_a },
      { action: "button_right", title: allContent.button_b }
    );
    (datas.url_tuiguang = allContent.link),
      (datas.url_left = allContent.button_a_link),
      (datas.url_right = allContent.button_b_link);
  } else {
    action.push();
    datas.url_tuiguang = allContent.link;
  }
  const notificationTitle = payload.data.title;
  const notificationOptions = {
    body: allContent.content,
    icon: allContent.icon,
    image: allContent.big_img,
    // requireInteraction: true,   //通知不消失
    // tag: 'unique-notification', // 防止多个通知叠加
    actions: action,
    data: datas,
  };

  // 显示通知
  event.waitUntil(
    self.registration.showNotification(notificationTitle, notificationOptions)
  );
});
